'use strict';

/**
 * 门禁控制器指令发送
 */
const net = require('net');

let lastTime = new Date().getTime();

function openDoor(host, port, no) {
    const now = new Date().getTime();
    console.log('LAST TIME: ' + (now - lastTime) + "ms");
    // 控制一下2s之内执行一次
    if ((now - lastTime) < 2000) {
        return;
    }
    const client = new net.Socket();
    lastTime = new Date().getTime();
    const start = new Date().getTime();
    client.connect(port, host, function () {
        const end = new Date().getTime();
        console.log('CONNECTED TO: ' + host + ':' + port + ':' + no.split(':')[0] + ' ' + (end - start) + "ms");
        // 建立连接后立即向服务器发送数据，服务器将收到这些数据
        // 01表示1秒后off，最大99秒
        if (no) {
            client.write('on' + no);
        }
        // 粗糙处理了，可能偶尔会有BUG
        setTimeout(function () {
            client.destroy();
        }, 1000);
    });

    // 为客户端添加“data”事件处理函数
    // data是服务器发回的数据
    client.on('data', function (data) {
        console.log('DATA: ' + data);
    });

    client.on('end', function () {
        console.log('client disconnected');
    });

    client.on('error', function (err) {
        console.log('socket error - ', err);
    });

    // 为客户端添加“close”事件处理函数
    client.on('close', function () {
        console.log('connection closed');
    });
}

exports.openDoor = openDoor;
